const puppeteer = require('puppeteer');

const url = `https://movie.douban.com/tag/#/?sort=R&range=6,10&tags=`
const sleep = time => new Promise(resolve => {
  setTimeout(resolve, time)
})

;(async () => {
  console.log('爬虫puppeteer  开波！')
  const browser = await puppeteer.launch({
    args: ['--no-sandbox'],
    dumpio: false
  })
  const page = await browser.newPage()
  await page.goto(url,{
    waitUntil: 'networkidle2'
  })
  await sleep(3000);
  await page.waitForSelector('.more')

  for(let i = 0; i < 1; i++) {
    await sleep(3000)
    await page.click('.more')
  }

  const result = await page.evaluate(() => {
    var $ = window.$;
    var items = $('.list-wp a');
    var links = []

    if (items.length >= 1) {
      items.each((index, item)=> {
        let it = $(item)
        let doubanId = it.find('div').data('id')
        let title = it.find('.title').text()
        let rate = Number(it.find('.rate').text())
        let poster = it.find('img').attr('src').replace('s_ratio', 'l_ratio')
        
        links.push({
          doubanId,
          title,
          rate,
          poster
        })

      })
    }
    return links
  })
  browser.close()
  console.log(result)
})()

/*
  声明地址之后我们就开始引入puppeteer
  声明一个自动执行的function而且是一个异步函数
  ;(async () => {
    console.log('爬虫puppeteer  开波！')
  })()

  在function里面声明一个browser它相当于一个你看不到的
  浏览器,通过await调用puppeteer它的launch方法;对launch
  方法传入一个配置对象args来启动非沙箱模式;传入一个dumpio
  方法写上false

  声明一个page是通过browser的newPage方法来开启一个
  新页面;通过await page.goto(url,{waitUntil: 
  'networkidle'})    {waitUntil: 'networkidle'}
  当这个网络空闲的时候说明已经加载完毕了

  我们在增加一个延时await sleep(3000);等待3000毫秒
  之后再做其他的事情  sleep是一个promise的定时函数

  3秒后await page.awaitForSelector('.more')
  我们看到豆瓣有一个加载更多它的按钮的class名是more

  for(let i = 0; i < 1; i++) {
    await sleep(3000)
    await.page.click('.more')
  }
  我们只爬取两页的数据第一页就是默认加载的数据列表第二页
  就是等待按钮出现以后点击按钮

  继续获取网页内容
  我们先声明一个result搜查页面的元素
  var links = []是一个空数组用来收集我们最后收集的数据
*/